package delphorm.web.controller;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import delphorm.entite.questionnaire.Question;
import delphorm.entite.questionnaire.Questionnaire;
import delphorm.entite.questionnaire.Reponse;
import delphorm.service.questionnaire.IQuestionnaire;


public class ChargerObjetQuestionnaireSession extends MultiActionController {
	IQuestionnaire serviceQuestionnaire;
	
	public ModelAndView questionnaire(HttpServletRequest request, HttpServletResponse response)
	{
//		récupère l'id de la question qu'on cherche dans la requete
		String id = request.getParameter("numeroquestionnaire");
//		TODO exception si null
		int num = Integer.parseInt(id);
//		TODO exception si erreur de convertion NumberFormatException
		
		//récupère le questionnaire
		Questionnaire questionnaire = serviceQuestionnaire.getQuestionnaireParId(new Long(num));
		//TODO exception si null
//		met le questionnaire dans la session
		request.getSession().setAttribute("questionnaire",questionnaire);
		
//		la page de confirmation de ce controller redirige vers la bonne url
//		String urlRedirection = new String("./ajouterQuestion.html");
		//on met l'url de la redirection dans la requête
//		request.setAttribute("urlRedirection",urlRedirection);
		return new ModelAndView("modifierQuestionnaireConfirm");
	}
	
	public ModelAndView question(HttpServletRequest request, HttpServletResponse response)
	{
		//récupération du questionnaire dans la session
		Questionnaire questionnaire = (Questionnaire)request.getSession().getAttribute("questionnaire");
		//récupère l'id de la question qu'on cherche dans la requete
		String id = request.getParameter("numeroquestion");
		//TODO exception si null
		int num = Integer.parseInt(id);
		//TODO exception si erreur de convertion NumberFormatException
		Integer idQuestion = new Integer(num);
		//récupération de la question
		Question question = (Question)questionnaire.getQuestions().get(idQuestion.intValue());
		//met la question dans la session
		//TODO exception si la question n'est pas trouvée
		request.getSession().setAttribute("question",question);
		//récupère la vue 
		String vue = request.getParameter("vue");
		//retourn le ModelAndView
		//TODO exception si null
		
		//note: la vue passée en paramètre pourrait être celle réellement retournée
		//mais non en fait. Purquoi? pour cacher le maximum de l'implémentation dans les pages de l'utilisateur
		//est-ce justifié????
		if(vue.equals("modifier"))
		{
			//la page de confirmation de ce controller redirige vers la bonne url
			String urlRedirection = new String("./editerQuestion.html");
			//on met l'url de la redirection dans la requête
			request.setAttribute("urlRedirection",urlRedirection);
			return new ModelAndView("chargerObjetQuestionnaireSessionConfirm");
		}
		else if (vue.equals("supprimer"))
		{
			String urlRedirection = new String("./supprimerQuestion.html");
			request.setAttribute("urlRedirection",urlRedirection);
			return new ModelAndView("chargerObjetQuestionnaireSessionConfirm");
		}
		else if(vue.equals("ajouterreponse"))
		{
			String urlRedirection = new String("./ajouterReponse.html");
			request.setAttribute("urlRedirection",urlRedirection);
			return new ModelAndView("chargerObjetQuestionnaireSessionConfirm");
		}
		//TODO else exception
		return null;
	}
	public ModelAndView reponse(HttpServletRequest request, HttpServletResponse response)
	{
//		récupération du questionnaire dans la session
		Questionnaire questionnaire = (Questionnaire)request.getSession().getAttribute("questionnaire");
		
		//récupère l'id de la question qu'on cherche dans la requete
		String id = request.getParameter("numeroquestion");
		//TODO exception si null
		int num = Integer.parseInt(id);
		//TODO exception si erreur de convertion NumberFormatException
		Integer idQuestion = new Integer(num);
		//récupération de la question
		Question question = (Question)questionnaire.getQuestions().get(idQuestion.intValue());
		//TODO exception si pas trouvé
		//met la question dans la session
		request.getSession().setAttribute("question",question);

		//récupère l'id de la réponse qu'on cherche dans la requete
		id = request.getParameter("numeroreponse");
		//TODO exception si null
		num = Integer.parseInt(id);
		//TODO exception si erreur de convertion NumberFormatException
		Integer idReponse = new Integer(num);
		//récupération de la réponse
		Reponse reponse = (Reponse)question.getReponses().get(idReponse.intValue());
		
		//met la reponse dans la session
		request.getSession().setAttribute("reponse",reponse);
		
		//récupère la vue 
		String vue = request.getParameter("vue");
		//TODO exception si null
		
		//note: la vue passée en paramètre pourrait être celle réellement retournée
		//mais non en fait. Purquoi? pour cacher le maximum de l'implémentation dans les pages de l'utilisateur
		//est-ce justifié????
		if(vue.equals("modifier"))
		{
			//la page de confirmation de ce controller redirige vers la bonne url
			String urlRedirection = new String("./editerReponse.html");
			//on met l'url de la redirection dans la requête
			request.setAttribute("urlRedirection",urlRedirection);
			return new ModelAndView("chargerObjetQuestionnaireSessionConfirm");
		}
		else if (vue.equals("supprimer"))
		{
			String urlRedirection = new String("./supprimerReponse.html");
			request.setAttribute("urlRedirection",urlRedirection);
			return new ModelAndView("chargerObjetQuestionnaireSessionConfirm");
		}
		//TODO else exception
		return null;
	}

	public IQuestionnaire getServiceQuestionnaire() {
		return serviceQuestionnaire;
	}

	public void setServiceQuestionnaire(IQuestionnaire serviceQuestionnaire) {
		this.serviceQuestionnaire = serviceQuestionnaire;
	}
	
	
}
